From: Paul Eggert Date: Tue, 6 Sep 2011 15:38:39 +0000 (-0700) Subject: * fileio.c: Fix bugs with large file offsets (Bug#9428). X-Git-Tag: archive/raspbian/1%29.2+1-2+rpi1~1^2~324^2~2380 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:///%22http:/www.example.com/cgi/%22https:/www.github.com/%22bookmarks:/?a=commitdiff_plain;h=365071f851199f7411ad9079cda2ab3ed99d2c28;p=emacs.git * fileio.c: Fix bugs with large file offsets (Bug#9428). The previous code assumed that file offsets (off_t values) fit in EMACS_INT variables, which is not true on typical 32-bit hosts. The code messed up by falsely reporting buffer overflow in cases such as (insert-file-contents "big" nil 1 2) into an empty buffer when "big" contains more than 2**29 bytes, even though this inserts just one byte and does not overflow the buffer. (Finsert_file_contents): Store file offsets as off_t values, not as EMACS_INT values. Check for overflow when converting between EMACS_INT and off_t. When checking for buffer overflow or for overlap, take the offsets into account. Don't use EMACS_INT for small values where int suffices. When checking for overlap, fix a typo: ZV was used where ZV_BYTE was intended. (Fwrite_region): Don't assume off_t fits into 'long'. * buffer.h (struct buffer.modtime_size): Now off_t, not EMACS_INT. --- 365071f851199f7411ad9079cda2ab3ed99d2c28